package model.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import model.entity.brain.DumbBrain;
import model.entity.brain.PetBrain;
import model.entity.stats.Stat;
import model.entity.stats.StatSet;
import model.entity.stats.StatType;
import model.item.EquippedInventory;
import model.item.Inventory;
import model.item.TakeableItem;
import model.map.Direction;
import model.map.Location;
import model.map.MovementType;
import model.map.World;
import model.skill.LinearProjectile;
import model.skill.ProjectileLibrary;

public class NPCLibrary
{
	private static Map<String, NPC> npcMap;
	private static Map<String, MountableNPC> mountableNPCMap;
	private static Map<String, MerchantNPC> merchantNPCMap;

	static private NPCLibrary instance = null;

	private NPCLibrary(){
		npcMap = new HashMap<String, NPC>();
		mountableNPCMap = new HashMap<String, MountableNPC>();
		merchantNPCMap = new HashMap<String, MerchantNPC>();
		initLibrary();
	}

	public static NPCLibrary getInstance() {
		if ( instance != null ) {
			return instance;
		}
		return instance = new NPCLibrary();
	}

	public static void initLibrary(){

		

		StatSet statSet1 = new StatSet();
		// Stat keys
		statSet1.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet1.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet1.addStat(StatType.MOVEMENTSPEED , new Stat(0.1, StatType.MOVEMENTSPEED)); 
		statSet1.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet1.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet1.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet1.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet1.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet1.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet1.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet1.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet1.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet1.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// DerivedStat keys
		statSet1.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet1.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet1.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet1.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet1.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet1.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill Stats
		statSet1.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//-------
		StatSet statSet2 = new StatSet();
		// Stat keys
		statSet2.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet2.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet2.addStat(StatType.MOVEMENTSPEED , new Stat(0.4, StatType.MOVEMENTSPEED)); 
		statSet2.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet2.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet2.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet2.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet2.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet2.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet2.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet2.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet2.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet2.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri2edStat keys
		statSet2.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet2.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet2.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet2.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet2.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet2.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill2Stats
		statSet2.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//----
		StatSet statSet3 = new StatSet();
		// Stat keys
		statSet3.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet3.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet3.addStat(StatType.MOVEMENTSPEED , new Stat(0.4, StatType.MOVEMENTSPEED)); 
		statSet3.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet3.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet3.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet3.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet3.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet3.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet3.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet3.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet3.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet3.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri3edStat keys
		statSet3.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet3.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet3.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet3.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet3.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet3.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill3Stats
		statSet3.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet4 = new StatSet();
		// Stat keys
		statSet4.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet4.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet4.addStat(StatType.MOVEMENTSPEED , new Stat(0.3, StatType.MOVEMENTSPEED)); 
		statSet4.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet4.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet4.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet4.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet4.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet4.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet4.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet4.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet4.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet4.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri4edStat keys
		statSet4.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet4.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet4.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet4.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet4.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet4.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill4Stats
		statSet4.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet5 = new StatSet();
		// Stat keys
		statSet5.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet5.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet5.addStat(StatType.MOVEMENTSPEED , new Stat(0.4, StatType.MOVEMENTSPEED)); 
		statSet5.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet5.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet5.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet5.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet5.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet5.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet5.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet5.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet5.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet5.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri5edStat keys
		statSet5.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet5.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet5.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet5.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet5.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet5.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill5Stats
		statSet5.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet6 = new StatSet();
		// Stat keys
		statSet6.addStat(StatType.HP , new Stat(10000, StatType.HP));
		statSet6.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet6.addStat(StatType.MOVEMENTSPEED , new Stat(0.9, StatType.MOVEMENTSPEED)); 
		statSet6.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet6.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet6.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet6.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet6.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet6.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet6.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet6.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet6.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet6.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri6edStat keys
		statSet6.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet6.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet6.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet6.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet6.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet6.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill6Stats
		statSet6.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet7 = new StatSet();
		// Stat keys
		statSet7.addStat(StatType.HP , new Stat(100, StatType.HP));
		statSet7.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet7.addStat(StatType.MOVEMENTSPEED , new Stat(0.8, StatType.MOVEMENTSPEED)); 
		statSet7.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet7.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet7.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet7.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet7.addStat(StatType.MONEY , new Stat(1000000000, StatType.MONEY)); 
		statSet7.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet7.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet7.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet7.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet7.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri7edStat keys
		statSet7.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet7.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet7.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet7.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet7.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet7.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill7Stats
		statSet7.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet8 = new StatSet();
		// Stat keys
		statSet8.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet8.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet8.addStat(StatType.MOVEMENTSPEED , new Stat(0.8, StatType.MOVEMENTSPEED)); 
		statSet8.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet8.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet8.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet8.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet8.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet8.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet8.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet8.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet8.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet8.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri8edStat keys
		statSet8.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet8.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet8.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet8.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet8.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet8.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill8Stats
		statSet8.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet9 = new StatSet();
		// Stat keys
		statSet9.addStat(StatType.HP , new Stat(1000, StatType.HP));
		statSet9.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet9.addStat(StatType.MOVEMENTSPEED , new Stat(2, StatType.MOVEMENTSPEED)); 
		statSet9.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet9.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet9.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet9.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet9.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet9.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet9.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet9.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet9.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet9.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri9edStat keys
		statSet9.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet9.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet9.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet9.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet9.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet9.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill9Stats
		statSet9.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 
		//---
		StatSet statSet10 = new StatSet();
		// Stat keys
		statSet10.addStat(StatType.HP , new Stat(10, StatType.HP));
		statSet10.addStat(StatType.MP , new Stat(10, StatType.MP));
		statSet10.addStat(StatType.MOVEMENTSPEED , new Stat(0.8, StatType.MOVEMENTSPEED)); 
		statSet10.addStat(StatType.AGILITY , new Stat(10, StatType.AGILITY)); 
		statSet10.addStat(StatType.STRENGTH , new Stat(10, StatType.STRENGTH)); 
		statSet10.addStat(StatType.INTELLECT , new Stat(10, StatType.INTELLECT)); 
		statSet10.addStat(StatType.HARDINESS , new Stat(10, StatType.HARDINESS)); 
		statSet10.addStat(StatType.MONEY , new Stat(10, StatType.MONEY)); 
		statSet10.addStat(StatType.EXP , new Stat(10, StatType.EXP)); 
		statSet10.addStat(StatType.SIGHTRANGE , new Stat(10, StatType.SIGHTRANGE)); 
		statSet10.addStat(StatType.LIVES , new Stat(10, StatType.LIVES)); 
		statSet10.addStat(StatType.PICKPOCKET , new Stat(10, StatType.PICKPOCKET)); 
		statSet10.addStat(StatType.BARGIN , new Stat(10, StatType.BARGIN)); 
		// Deri10edStat keys
		statSet10.addStat(StatType.MAXMP , new Stat(10, StatType.MAXMP)); 
		statSet10.addStat(StatType.MAXHP , new Stat(10, StatType.MAXHP)); 
		statSet10.addStat(StatType.OFFENSIVERATING , new Stat(10, StatType.OFFENSIVERATING)); 
		statSet10.addStat(StatType.DEFENSIVERATING , new Stat(10, StatType.DEFENSIVERATING)); 
		statSet10.addStat(StatType.ARMORRATING , new Stat(10, StatType.ARMORRATING)); 
		statSet10.addStat(StatType.LEVEL , new Stat(10, StatType.LEVEL)); 
		//Skill10Stats
		statSet10.addStat(StatType.OBSERVATION , new Stat(10, StatType.OBSERVATION)); 

		ArrayList<MovementType> mt1 = new ArrayList<MovementType>();
		mt1.add( MovementType.GRASS );
		mt1.add( MovementType.WATER );

		ArrayList<MovementType> mt2 = new ArrayList<MovementType>();
		mt2.add( MovementType.GRASS );
		mt2.add( MovementType.MOUNTAINS );

		Inventory inv1 = new Inventory();
		ProjectileLibrary.getInstance();
		inv1.addItem(new TakeableItem("anItem", ProjectileLibrary.getLinearProjectile("linearProjectileSlowSpeedAndHeavyDamageAndLongDistance"), 100));
		//ProjectileLibrary.getInstance();
		inv1.addItem(new TakeableItem("anotherItem", ProjectileLibrary.getLinearProjectile("linearProjectileSlowSpeedAndHeavyDamageAndLongDistance"), 90));

		Inventory inv2 = new Inventory();
		//ProjectileLibrary.getInstance();
		inv2.addItem(new TakeableItem("anItem", ProjectileLibrary.getLinearProjectile("linearProjectileSlowSpeedAndHeavyDamageAndLongDistance"), 10));
		//ProjectileLibrary.getInstance();
		inv2.addItem(new TakeableItem("anotherItem", ProjectileLibrary.getLinearProjectile("linearProjectileSlowSpeedAndHeavyDamageAndLongDistance"), 20));

		ArrayList<String> dialogue = new ArrayList<String>();
		dialogue.add("ZOMG U are SOOOO HOTT");
		dialogue.add("Did you know, there's a camera watching you");
		dialogue.add(".zzz... tick-tick cuucuucaachuuuuuu");
		dialogue.add("sooo meatyyyyy");

		OccupationLibrary.getInstance();
		Occupation sm = OccupationLibrary.getOccupation("smasherOccupation");
		//OccupationLibrary.getInstance();
		Occupation sn = OccupationLibrary.getOccupation("sneakOccupation");
		//OccupationLibrary.getInstance();
		Occupation su = OccupationLibrary.getOccupation("summonerOccupation");

		NPC npc1 = new NPC("npc1", Direction.S, new Location(13,13), statSet1, mt1, inv1, new EquippedInventory(), sm, false, new DumbBrain(null));
		NPC npc2 = new NPC("npc2", Direction.S, new Location(14,14), statSet2, mt1, inv1, new EquippedInventory(), sm, false, new DumbBrain(null));
		NPC npc3 = new NPC("npc3", Direction.S, new Location(15,15), statSet3, mt1, inv1, new EquippedInventory(), sm, false, new DumbBrain(null));
		NPC npc4 = new NPC("npc4", Direction.S, new Location(16,13), statSet4, mt1, inv1, new EquippedInventory(), sn, false, new DumbBrain(null));
		NPC npc5 = new NPC("npc5", Direction.S, new Location(13,16), statSet5, mt2, inv1, new EquippedInventory(), sn, false, new DumbBrain(null));
		NPC npc6 = new NPC("npc6", Direction.S, new Location(16,16), statSet8, mt1, inv1, new EquippedInventory(), sn, false, new DumbBrain(null));

		NPC pet  = new NPC("Pet", Direction.S, new Location(15,17), statSet6, mt2, inv2, new EquippedInventory(), sn, false, null);
		pet.setBrain( new PetBrain( World.getInstance().getPlayer(), pet, World.getInstance().getCurrentMap()) );
		MerchantNPC npcMerchant = new MerchantNPC("npcMerchant", Direction.S, new Location(25,25), statSet7, mt1, inv2, new EquippedInventory(), su, false, new DumbBrain(null), dialogue);
		MountableNPC npcMountable = new MountableNPC("npcMountable", Direction.S, new Location(28,28), statSet9, mt2, inv2, new EquippedInventory(), su, false, new DumbBrain(null));


				npcMap.put("npc1", npc1);
				npcMap.put("npc2", npc2);
				npcMap.put("npc3", npc3);
				npcMap.put("npc4", npc4);
				npcMap.put("npc5", npc5);
				npcMap.put("npc6", npc6);
				npcMap.put("pet", pet);
				merchantNPCMap.put("npcMerchant", npcMerchant);
				mountableNPCMap.put("npcMountable", npcMountable);
				/*
				 * constructors for reference
				 public NPC(String name, Direction direction, Location location, StatSet stats, 
				 List<MovementType> movementTypes, Inventory inventory, 
				 EquippedInventory equipment, Occupation occupation, Boolean sleeping, Brain brain){
				 ---
				 public MountableNPC(String name, Direction direction, Location location, StatSet stats, 
				 List<MovementType> movementTypes, Inventory inventory, 
				 EquippedInventory equipment, Occupation occupation, Boolean sleeping, Brain brain){
				 ---
				 public MerchantNPC(String name, Direction direction, Location location, StatSet stats, 
				 List<MovementType> movementTypes, Inventory inventory, 
				 EquippedInventory equipment, Occupation occupation, Boolean sleeping, Brain brain, List<String> dialog){
				 */

	}

	public static NPC getNPC(String name)
	{
		return npcMap.get(name);
	}

	public static MerchantNPC getMerchantNPC(String name)
	{
		return merchantNPCMap.get(name);
	}

	public static NPC getMountableNPC(String name)
	{
		return mountableNPCMap.get(name);
	}				 
}
